import store from '@/store'
import config from '@/config'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { toast, showConfirm, tansParams } from '@/utils/common'

let timeout = 10000
const baseUrl = config.baseUrl
const chunkUploadUrl = config.chunkUploadUrl

const upload = config => {
  // 是否需要设置 token
  const isToken = (config.headers || {}).isToken === false
  config.header = config.header || {}
  if (getToken() && !isToken) {
    config.header['Authorization'] = 'Bearer ' + getToken()
  }
  // get请求映射params参数
  if (config.params) {
    let url = config.url + '?' + tansParams(config.params)
    url = url.slice(0, -1)
    config.url = url
  }
  return new Promise((resolve, reject) => {
		  // return reject()
			//判断是否是缓存文件
			if(config.chunkPath && store.state.system.uploadedChunkList.includes(config.chunkHash)){
				config.file.progress += 100/config.file.chunkdata.length;
				return resolve(result);
			}
			let uploadUrl = baseUrl
			if(config.chunkPath) uploadUrl = chunkUploadUrl
			// console.log("get here",config);
			// console.log("get here",config.formData);
			// console.log("get here",config.chunkPath);
      uni.uploadFile({
        timeout: config.timeout || timeout,
        url: uploadUrl + config.url,
        filePath: config.chunkPath,
        name: config.name || 'chunkFile',
        header: config.header,
        formData: { 
					"fileName": config.formData.get("fileName"),
					"fileHash": config.formData.get("fileHash"),
					"chunkPath": config.formData.get("chunkPath"),
					"chunkHash": config.formData.get("chunkHash"),
				},
        success: (res) => {
          let result = JSON.parse(res.data)
          const code = result.code || 200
          const msg = errorCode[code] || result.msg || errorCode['default']
          if (code === 200) {
						console.log('config.file.hash',config.file.hash);
						if(config.file.hash){
							//若是分包保存chunk本地hash
							config.file.progress += 100/config.file.chunkdata.length;
							console.log('config.file.progress',config.file.progress);
							// this.$store.uploadedChunkList.push(config.fileHash);
						}
            resolve(result)
          } else if (code == 401) {
            showConfirm("登录状态已过期，您可以继续留在该页面，或者重新登录?").then(res => {
              if (res.confirm) {
                store.dispatch('LogOut').then(res => {
                  uni.reLaunch({ url: '/pages/login/login' })
                })
              }
            })
            reject('无效的会话，或者会话已过期，请重新登录。')
          } else if (code === 500) {
            toast(msg)
            reject('500')
          } else if (code !== 200) {
            toast(msg)
            reject(code)
          }
        },
        fail: (error) => {
					console.log("get here error",error);
          let { message } = error
					if(undefined != error.errMsg){
            message = '文件上传失败：uploadFile:fail'						
					} else if (message == 'Network Error') {
            message = '后端接口连接异常'
          } else if (message.includes('timeout')) {
            message = '系统接口请求超时'
          } else if (message.includes('Request failed with status code')) {
            message = '系统接口' + message.substr(message.length - 3) + '异常'
          }
          toast(message)
          reject(error)
        }
      })
  }).catch((error) => {
		// console.log('e',e);
    let { message } = error
		if(undefined != error.errMsg){
		  message = '文件上传失败：uploadFile:fail'
		}
    return Promise.reject(message)
	});
}

export default upload
